package model;

import java.io.Serializable;

import java.math.BigDecimal;

import java.util.Date;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@NamedQueries( { @NamedQuery(name = "Vehiculo.findAll", query = "select o from Vehiculo o") })
public class Vehiculo implements Serializable {
    @Column(nullable = false)
    private BigDecimal anio;
    @Temporal(TemporalType.DATE)
    @Column(name = "F_PROX_MANTENCION", nullable = false)
    private Date fProxMantencion;
    @Column(nullable = false)
    private BigDecimal kilometraje;
    @Column(name = "KM_SEMANA")
    private BigDecimal kmSemana;
    @Id
    @Column(nullable = false, length = 6)
    private String patente;
    @Temporal(TemporalType.DATE)
    @Column(name = "REVISION_TECNICA", nullable = false)
    private Date revisionTecnica;
    @OneToMany(mappedBy = "vehiculo")
    private List<Camion> camionList;
    @OneToMany(mappedBy = "vehiculo1")
    private List<Mantencion> mantencionList1;
    @ManyToOne
    @JoinColumn(name = "ID_MODELO")
    private Modelo modelo1;
    @OneToMany(mappedBy = "vehiculo2")
    private List<Carro> carroList;

    public Vehiculo() {
    }

    public Vehiculo(BigDecimal anio, Date fProxMantencion, Modelo modelo1, BigDecimal kilometraje, BigDecimal kmSemana,
                    String patente, Date revisionTecnica) {
        this.anio = anio;
        this.fProxMantencion = fProxMantencion;
        this.modelo1 = modelo1;
        this.kilometraje = kilometraje;
        this.kmSemana = kmSemana;
        this.patente = patente;
        this.revisionTecnica = revisionTecnica;
    }

    public BigDecimal getAnio() {
        return anio;
    }

    public void setAnio(BigDecimal anio) {
        this.anio = anio;
    }

    public Date getFProxMantencion() {
        return fProxMantencion;
    }

    public void setFProxMantencion(Date fProxMantencion) {
        this.fProxMantencion = fProxMantencion;
    }


    public BigDecimal getKilometraje() {
        return kilometraje;
    }

    public void setKilometraje(BigDecimal kilometraje) {
        this.kilometraje = kilometraje;
    }

    public BigDecimal getKmSemana() {
        return kmSemana;
    }

    public void setKmSemana(BigDecimal kmSemana) {
        this.kmSemana = kmSemana;
    }

    public String getPatente() {
        return patente;
    }

    public void setPatente(String patente) {
        this.patente = patente;
    }

    public Date getRevisionTecnica() {
        return revisionTecnica;
    }

    public void setRevisionTecnica(Date revisionTecnica) {
        this.revisionTecnica = revisionTecnica;
    }

    public List<Camion> getCamionList() {
        return camionList;
    }

    public void setCamionList(List<Camion> camionList) {
        this.camionList = camionList;
    }

    public Camion addCamion(Camion camion) {
        getCamionList().add(camion);
        camion.setVehiculo(this);
        return camion;
    }

    public Camion removeCamion(Camion camion) {
        getCamionList().remove(camion);
        camion.setVehiculo(null);
        return camion;
    }

    public List<Mantencion> getMantencionList1() {
        return mantencionList1;
    }

    public void setMantencionList1(List<Mantencion> mantencionList1) {
        this.mantencionList1 = mantencionList1;
    }

    public Mantencion addMantencion(Mantencion mantencion) {
        getMantencionList1().add(mantencion);
        mantencion.setVehiculo1(this);
        return mantencion;
    }

    public Mantencion removeMantencion(Mantencion mantencion) {
        getMantencionList1().remove(mantencion);
        mantencion.setVehiculo1(null);
        return mantencion;
    }

    public Modelo getModelo1() {
        return modelo1;
    }

    public void setModelo1(Modelo modelo1) {
        this.modelo1 = modelo1;
    }

    public List<Carro> getCarroList() {
        return carroList;
    }

    public void setCarroList(List<Carro> carroList) {
        this.carroList = carroList;
    }

    public Carro addCarro(Carro carro) {
        getCarroList().add(carro);
        carro.setVehiculo2(this);
        return carro;
    }

    public Carro removeCarro(Carro carro) {
        getCarroList().remove(carro);
        carro.setVehiculo2(null);
        return carro;
    }
}
